% coding: utf-8

\section{Enunciado del trabajo práctico}
\begin{enumerate}
	\item Introducción
	
En este taller nos proponemos experimentar con herramientas y técnicas frecuentes a nivel de red: ICMPing, ARPing y traceroute. Los objetivos son múltiples: por un lado, entender los protocolos involucrados, además de desarrollar nuestras propias implementaciones de las herramientas de manera de afianzar los conocimientos. Por otra parte, se deberá realizar todo lo anterior en un marco analítico que nos permita razonar sobre lo hecho y comprender mejor qué pasa detrás de bambalinas.

	\item Entrega
\begin{itemize}
		\item Fecha de entrega: 6/06/2012
		\item El código deberá haber sido enviado por correo para esa fecha con el siguiente formato:
		
		to: tdc$-$doc at dc uba ar
		
		subject: $[$tdc$-$red$]$ lo$-$que$-$quieran$-$poner

		body: integrantes y mails

		attachment: tp$\_$red.py
		\item Se deberá entregar el informe impreso y abrochado con la lista de integrantes y vuestros correos electrónicos.
(Los mismos que fueran enviados por mail).

\end{itemize}	

	\item Enunciado

A partir de los conceptos explicados durante la clase de taller1, cada grupo deberá realizar las consignas detalladas más abajo.
Para los ejercicios de programación, recomendamos fuertemente tomar como base el esqueleto provisto por la cátedra, que puede encontrarse en la web de la materia. Cada ítem a realizar consiste en la signatura de la función correspondiente, que viene además apropiadamente acompañada de comentarios y observaciones que pueden resultar útiles.

	\begin{itemize}
		\item Consignas
			\subitem Primera parte: ping en sus distintos sabores
		\begin{itemize}
			\item {Implementar ARPing utilizando Scapy}

La idea es enviar un paquete ARP a un host dentro de su segmento de red. En caso de recibir alguna respuesta, podremos inferir que el host está vivo (exceptuando algunos escenarios que obviaremos para mantener la simplicidad del ejercicio).

			\item{Implementar ICMPing utilizando Scapy}

En este caso, la estrategia es enviar un paquete ICMP de tipo Echo-Request a un host que puede estar tanto dentro como fuera de la red local.
		\end{itemize} 

		\item {Segunda parte: network discovery}

En esta consigna llevaremos un paso más allá las herramientas desarrolladas en el punto anterior. Esto lo haremos realizando un scan de un rango completo de red, e informando en cada caso los hosts que han contestado al request. En otras palabras, indicar quién “está vivo” y quién no. En forma complementaria, se pide realizar experimentos con sendas implementaciones (i.e., network discovery vía ICMP y network discovery vía ARP) y comentar para qué escenarios conviene más una u otra. Pensar cuáles problemas puede tener cada una.

		\item {Tercera parte: traceroute sobre ICMP}

Este ejercicio consiste en implementar en Scapy el algoritmo de traceroute sobre ICMP presentado en clase. Además de suministrar el código, se pide responder en el informe las siguientes preguntas:
Elegir uno o más destinos (e.g., el servidor de Google) y determinar qué ruta (i.e., secuencia de IPs) se obtiene al correr la herramienta desarrollada para tal/es destino/s. Repetir el experimento anterior en distintos momentos del día y analizar cómo impacta esto en las rutas encontradas. ¿Qué conclusiones se pueden sacar?

		\item{Cuarta parte: análisis de traceroute}

En esta última consigna realizaremos un análisis comparativo entre distintas versiones de traceroute, usando como eje la desarrollada previamente: Repetir la primera pregunta de la consigna anterior para las herramientas traceroute y tcptraceroute de Linux. Comparar con la implementación propia y analizar qué ocurre con los resultados obtenidos. Si hay diferencias, arrojar hipótesis para explicarlas: ¿cómo pueden incluir en esto las distintas implementaciones de las herramientas?
Discutir qué ocurriría si se corriese un traceroute implementado con opciones IP desde un host en una red privada que sale a Internet a través de un gateway.


	\end{itemize}
\end{enumerate}